﻿// ------------------------------------------------------------------------------
// <copyright file="XamlSystemBaseType.cs" company="skumaronline.com">
//    Copyright (C) 2012 Suresh Kumar T.  All rights reserved.
// </copyright>
// ------------------------------------------------------------------------------

namespace StoreAppLib.MetaData
{
    using System;
    using Windows.UI.Xaml.Markup;

    /// <summary>
    /// Base XAML type
    /// </summary>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Windows.UI.Xaml.Build.Tasks", "4.0.0.0")]
    [System.Diagnostics.DebuggerNonUserCodeAttribute]
    public class XamlSystemBaseType : IXamlType
    {
        /// <summary>
        /// Type full name
        /// </summary>
        private string fullName;

        /// <summary>
        /// Backing type
        /// </summary>
        private Type underlyingType;

        /// <summary>
        /// Initializes a new instance of the <see cref="XamlSystemBaseType"/> class"
        /// </summary>
        /// <param name="fullName">Type full name</param>
        /// <param name="underlyingType">Backing type</param>
        public XamlSystemBaseType(string fullName, Type underlyingType)
        {
            this.fullName = fullName;
            this.underlyingType = underlyingType;
        }

        /// <summary>
        /// Gets type full name
        /// </summary>
        public string FullName
        {
            get
            {
                return this.fullName;
            }
        }

        /// <summary>
        /// Gets information for the backing type
        /// </summary>
        public Type UnderlyingType
        {
            get
            {
                return this.underlyingType;
            }
        }

        /// <summary>
        /// Gets the XAML type for the immediate base type of the XAML type
        /// </summary>
        public virtual IXamlType BaseType
        {
            get
            {
                throw new NotImplementedException();
            }
        }

        /// <summary>
        /// Gets the XAML member information for the XAML content property of this XAML type
        /// </summary>
        public virtual IXamlMember ContentProperty
        {
            get
            {
                throw new NotImplementedException();
            }
        }

        /// <summary>
        /// Gets a value indicating whether the XAML type represents an array
        /// </summary>
        public virtual bool IsArray
        {
            get
            {
                throw new NotImplementedException();
            }
        }

        /// <summary>
        /// Gets a value indicating whether this XAML type represents a collection
        /// </summary>
        public virtual bool IsCollection
        {
            get
            {
                throw new NotImplementedException();
            }
        }

        /// <summary>
        ///  Gets a value indicating whether this XAML type represents a constructible type, as per the XAML definition
        /// </summary>
        public virtual bool IsConstructible
        {
            get
            {
                throw new NotImplementedException();
            }
        }

        /// <summary>
        /// Gets a value indicating whether this XAML type represents a dictionary/map
        /// </summary>
        public virtual bool IsDictionary
        {
            get
            {
                throw new NotImplementedException();
            }
        }

        /// <summary>
        /// Gets a value indicating whether the XAML type represents a mark-up extension
        /// </summary>
        public virtual bool IsMarkupExtension
        {
            get
            {
                throw new NotImplementedException();
            }
        }

        /// <summary>
        /// Gets a value indicating whether the type support binding
        /// </summary>
        public virtual bool IsBindable
        {
            get
            {
                throw new NotImplementedException();
            }
        }

        /// <summary>
        /// Gets a value that provides the type information for the Items property of this XAML type
        /// </summary>
        public virtual IXamlType ItemType
        {
            get
            {
                throw new NotImplementedException();
            }
        }

        /// <summary>
        /// Gets a value that provides the type information for the Key property of this
        /// XAML type, if this XAML type represents a dictionary/map
        /// </summary>
        public virtual IXamlType KeyType
        {
            get
            {
                throw new NotImplementedException();
            }
        }

        /// <summary>
        /// Returns the XAML member information for a specific named member from this XAML type
        /// </summary>
        /// <param name="name">The name of the member to get (as a string)</param>
        /// <returns>The XAML member information for the member</returns>
        public virtual IXamlMember GetMember(string name)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Given a XAML type, sets its values for initialization and returns a usable instance
        /// </summary>
        /// <returns>The usable instance</returns>
        public virtual object ActivateInstance()
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Adds an item to a custom map type
        /// </summary>
        /// <param name="instance">The type instance to set the map item to</param>
        /// <param name="key">The key of the map item to add</param>
        /// <param name="item">The value of the map item to add</param>
        public virtual void AddToMap(object instance, object key, object item)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Adds an item to a custom vector type
        /// </summary>
        /// <param name="instance">The type instance to set the item to</param>
        /// <param name="item">The value of the item to add</param>
        public virtual void AddToVector(object instance, object item)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Invokes any necessary pre-activation logic as required by the XAML schema context and its platform dependencies
        /// </summary>
        public virtual void RunInitializer()
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Creates a type system representation based on a string. The main scenario for this usage is creating an 
        /// enumeration value and mapping the appropriate enumeration
        /// </summary>
        /// <param name="input">The string to create from</param>
        /// <returns>The resulting type system representation</returns>
        public virtual object CreateFromString(string input)
        {
            throw new NotImplementedException();
        }
    }
}
